#include <iostream>
#include <vector>
void swap(int & a, int & b) {
	int tmp = a;
	a = b;
	b = tmp;
}

void rotate(int a[], int n) {
	for (int i = 0, j = n-1; i < j; i++,j--)
		swap(a[i],a[j]);
}

bool permute(int a[], int n){
	int j = n-2;
	for( ; a[j]>=a[j+1]; j--);
	if (j < 0) return false;

	int l = n-1;
	for( ; a[j]>=a[l]; l--);
	swap(a[j],a[l]);
	rotate(&a[j+1],n-j-1);
	return true;
}


void test_permute() {
	int n;
	std::cin >> n;
	std::vector<int> a(n);
	for( int i = 0; i < n; i++)
		std::cin >> a[i];

	bool next;
	do {
		for(int i = 0; i < n; i++) 
			std::cout << a[i] << ' ';
		std::cout << std::endl;
	}
	while(next = permute(a.data(),sizeof(a)/sizeof(int) ) );
}